package methodod;

public class TowerHanoi {
    public static void main(String[] args) {
        // 测试用例：移动3个盘子从'A'到'C'，使用'B'作为辅助柱
        hanoi(3, 'A', 'B', 'C');
        System.out.println();
    }


      // 递归解决汉诺塔问题
      // @param n    需要移动的盘子数量
      // @param a    起始柱（当前需要移动的盘子所在柱）
      // @param b    辅助柱（中间过渡柱）
      // @param c    目标柱（最终需要将盘子移动到的柱）
  public static void hanoi(int n, char a, char b, char c) {
        // 基础情况：当只剩1个盘子时，直接移动
        if (n == 1) {
            System.out.println("Move 1 from " + a + " to " + c);
        } else {
            // Step 1: 将n-1个盘子从a通过c移动到b（此时c是辅助柱，b是临时目标柱）
            // 这一步完成后，最大的盘子（第n个）会暴露在a的最底部
            hanoi(n - 1, a, c, b);

            // Step 2: 移动最大的盘子（第n个）从a直接到c
            System.out.println("Move " + n + " from " + a + " to " + c);

            // Step 3: 将n-1个盘子从b通过a移动到c（此时a是辅助柱，c是最终目标柱）
            // 这一步将n-1个盘子从临时柱b转移到最终目标柱c
            hanoi(n - 1, b, a, c);
        }
    }
}